package com.orc.converter;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

/**
 * 文件扫描器，用于扫描指定目录下符合条件的文件
 */
public class FileScanner {

    /**
     * 扫描目录下符合模式的文件
     */
    public List<File> scanFiles(String directoryPath, String filePattern) {
        File directory = new File(directoryPath);
        List<File> result = new ArrayList<>();

        if (!directory.exists() || !directory.isDirectory()) {
            System.err.println("目录不存在或不是一个有效的目录: " + directoryPath);
            return result;
        }

        // 将通配符模式转换为正则表达式
        String regex = filePattern.replace(".", "\\.").replace("*", ".*").replace("?", ".");
        final Pattern pattern = Pattern.compile(regex);

        // 过滤符合条件的文件
        FileFilter fileFilter = file -> {
            if (file.isFile() && !file.isHidden()) {
                return pattern.matcher(file.getName()).matches();
            }
            return false;
        };

        // 递归扫描目录
        scanDirectory(directory, fileFilter, result);
        return result;
    }

    /**
     * 递归扫描目录
     */
    private void scanDirectory(File directory, FileFilter filter, List<File> result) {
        File[] files = directory.listFiles();
        if (files == null) {
            return;
        }

        for (File file : files) {
            if (file.isDirectory()) {
                scanDirectory(file, filter, result);
            } else if (filter.accept(file)) {
                result.add(file);
            }
        }
    }
}
    